#pragma once
#include <iostream>
#include <string>
#include "util.hpp"
namespace ns_log
{
    using namespace ns_util;//使用时间工具类
    // 日志等级
    enum    
    {
        INFO, 
        DEBUG,
        WARNING,
        ERROR,  
        FATAL
    }; 
    //参数:日志等级  在哪个文件打的日志  哪一行,方便追溯出错原因
    //将来是这样调用的: LOG(INFO) << "message输出信息" << "\n";
    //返回值:标准输出std::cout
    inline std::ostream &Log(const std::string &level, const std::string &file_name, int line)
    {
        // 添加日志等级
        std::string message = "[";
        message += level;
        message += "]";

        // 添加报错文件名称
        message += "[";
        message += file_name;
        message += "]";

        // 添加报错行
        message += "[";
        message += std::to_string(line);
        message += "]";

        // 日志时间戳   是什么时候打印的报错信息
        message += "[";
        message += TimeUtil::GetTimeStamp();
        message += "]";

        // cout 本质内部是包含缓冲区的 ,将刚才的message写入到缓冲区
        std::cout << message; //不要endl进行刷新,此时message就会暂存到cout的缓冲区当中

        return std::cout;
    }

    // 将来是这样调用的: LOG(等级) << "message" << "\n";
    // 开放式日志 
    #define LOG(level) Log(#level, __FILE__, __LINE__) //给宏参带#,将宏名称以字符串形式进行展示
} 